package com.zhangshanfeng.chartest;

import java.io.*;
import java.nio.charset.Charset;

/*
### 字符流中和编码解码问题相关的两个类【理解】

- InputStreamReader：是从字节流到字符流的桥梁,父类是Reader

  ​	它读取字节，并使用指定的编码将其解码为字符

  ​	它使用的字符集可以由名称指定，也可以被明确指定，或者可以接受平台的默认字符集

- OutputStreamWriter：是从字符流到字节流的桥梁,父类是Writer

  ​	是从字符流到字节流的桥梁，使用指定的编码将写入的字符编码为字节

  ​	它使用的字符集可以由名称指定，也可以被明确指定，或者可以接受平台的默认字符集

### 2.2转换流读写数据【应用】

+ 构造方法

  | 方法名                                              | 说明                                         |
  | --------------------------------------------------- | -------------------------------------------- |
  | InputStreamReader(InputStream in)                   | 使用默认字符编码创建InputStreamReader对象    |
  | InputStreamReader(InputStream in,String chatset)    | 使用指定的字符编码创建InputStreamReader对象  |
  | OutputStreamWriter(OutputStream out)                | 使用默认字符编码创建OutputStreamWriter对象   |
  | OutputStreamWriter(OutputStream out,String charset) | 使用指定的字符编码创建OutputStreamWriter对象 |
 */
public class ConversionStreamDemo01 {
    public static void main(String[] args) throws IOException {
        //method1();
        //method2();
        //在JDK11之后,字符流新推出了一个构造,也可以指定编码表
        /*FileReader fr = new FileReader("C:\\Users\\apple\\Desktop\\a.txt", Charset.forName("gbk"));
        int ch;
        while ((ch = fr.read())!=-1){
            System.out.println((char) ch);
        }
        fr.close();*/


        //如何解决乱码现象
        //文件是什么码表,那么咱们就必须使用什么码表去读取.
        //我们就要指定使用GBK码表去读取文件.

       /* InputStreamReader isr = new InputStreamReader(new FileInputStream("day12\\aaa.txt"), Charset.forName("GBK"));
        int len;
        while((len = isr.read()) != -1){
            System.out.println((char) len);
        }
        isr.close();*/

       /* OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\测试io\\aaa.txt"), Charset.forName("UTF-8"));
            osw.write("java致富");
            osw.close();*/

        //这个方法直接读取会产生乱码
        //因为文件是GBK码表
        //而idea默认的是UTF-8编码格式.
        //所以两者不一致,导致乱码
        FileReader fr = new FileReader("E:\\测试io\\ccc.txt");
        int bys;
        while ((bys = fr.read()) != -1){
            System.out.println((char) bys);
        }
        fr.close();


    }
}
